//
//  strings.swift
//  swift_ example
//
//  Created by 魏熙美 on 2020/2/21.
//  Copyright © 2020 魏熙美. All rights reserved.
//

import Foundation

// 字符串是值类型（值拷贝）

func 字符串() {
    // 2.字符串块(简称代码块) ==================================
    let num = 1
    let quotation = """
    当前值是：\(num)
        这是第二行内容
    "我知道这是一个字符串块"
    """
    print(quotation)
    
    var message = "这是一个消息,"
    // 字符串末尾追加
    message.append("追加一个")
    // 在最前面插入一个字符
    message.insert("中", at: message.startIndex)
    
    // 删除所有字符
    message.removeAll()
    // 根据条件删除
    message.removeAll { (char) -> Bool in
        return char == "中"
    }
    // 根据坐标删除
    message.remove(at: message.startIndex)
    // 删除最后一个字符
    message.removeLast()
    // 删除第一个字符
    message.removeFirst()
    
    // 替换
    // 把 中 替换成 间，并返回一个新的字符串
    let repStr = message.replacingOccurrences(of: "中", with: "间")
    print("字符串替换后的新字符串：", repStr)
    
    // 去掉首尾空格
    print("去掉首尾空格后的新字符串：", message.trimmingCharacters(in: CharacterSet.whitespaces))
    // message.trimmingCharacters(in: .whitespaces)

    // 字符串转换为数组，从 逗号开始切割
    print("字符串转换为数组，从 逗号开始切割", message.split(separator: ","))
    print("字符串转换为数组，从 逗号开始切割", message.components(separatedBy: ","))
    print("字符串转换为数组:", Array(message))
    
    // 转换为小写
    print("转换为小写:", message.lowercased())
    // 转换为大写
    print("转换为大写:", message.uppercased())
    
    // 是否包含这个前缀
    print("是否包含这个前缀：", message.hasPrefix("中"))
    // 是否包含这个后缀
    print("是否包含这个后缀:", message.hasSuffix("个"))
    
    
    // 获取下坐标(类型是 String.Index)
    let mesIndex = message.index(message.startIndex, offsetBy: 1)
    print("获取下坐标(类型是 String.Index): ", mesIndex)
    
    // 查找字符串
    let range: Range = message.range(of: "中")!
    // range.lowerBound 表示所在的位置
    let location: Int = message.distance(from: message.startIndex, to: range.lowerBound)
    print("查找字符串`中`的位置：\(location)")
    
    // 字符串截取
    let subStr = message[message.startIndex ... range.lowerBound]
    print("截取字符串：", subStr)
    
    // 遍历字符串
    for item in message {
        print(item)
    }
    
}
